package com.huajin.codetest.util;

import java.util.List;
import java.util.Objects;

import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.extern.slf4j.Slf4j;

/**
 * Jackson工具类
 *
 * @author hongwei.lian
 * @date 2021年9月19日 下午11:09:23
 */
@Slf4j
public class JacksonUtil {
	
	private static ObjectMapper mapper = new ObjectMapper();
	
	private JacksonUtil() {}
	
	/**
	 * 将对象转换为json字符串
	 * 
	 * @param data
	 * @return
	 * @author hongwei.lian
	 * @date 2021年9月19日 下午11:11:56
	 */
	public static String toJsonString(Object data) {
        if (Objects.isNull(data)) {
            return null;
        }
        String json = null;
        try {
            json = mapper.writeValueAsString(data);
        } catch (Exception e) {
            log.error("[{}] toJsonString error：{{}}", data.getClass().getSimpleName(), e);
        }
        return json;
    }
	
	/**
	 * 将json字符串转换为对象
	 * 
	 * @param json
	 * @param clazz
	 * @return
	 * @author hongwei.lian
	 * @date 2021年9月19日 下午11:12:21
	 */
	public static <T> T parseObject(String json, Class<T> clazz) {
		if (StringUtils.isBlank(json)) {
			return null;
	    }
        T t = null;
        try {
            t = mapper.readValue(json, clazz);
        } catch (Exception e) {
            log.error(" parse json [{}] to class [{}] error：{{}}", json, clazz.getSimpleName(), e);
        }
        return t;
    }
	
	/**
	 * 将json字符串转换为List对象集合
	 * 
	 * @param json
	 * @param clazz
	 * @return
	 * @author hongwei.lian
	 * @date 2021年9月19日 下午11:12:47
	 */
	public static <T> List<T> parseList(String json, Class<T> clazz) {
		if (StringUtils.isBlank(json)) {
			return null;
	    }
		List<T> t= null;
        try {
            t = mapper.readValue(json, new TypeReference<List<T>>() {});
        } catch (Exception e) {
            log.error(" parse json [{}] to class [{}] error：{{}}", json, clazz.getSimpleName(), e);
        }
        return t;
    }

}
